<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/actions/qualitydepartmentemployee/QualityDepartmentEmployeeAction.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/actions/Response.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/model/ServiceS/ervice.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/entities/Indicator.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/const/Error.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/const/Pattern.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/utils/Str.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/model/Service/ServiceFactory.php';

// TODO: доделать проверку корректности 
/*
 * Показатели процесса сохраняются.
Но пока нет проверок корректности данных: 1) год подпоказателя должен совпадать с годом родительского показателя 2) весовые коэффициенты должны быть от 0 до 1
3) весовые коэффициенты подпоказателей должны быть как-то связаны в весовым показателем родительского показателя
 */

final class IndicatorUpdateAction extends QualityDepartmentEmployeeAction {
protected function execute(Response $response) {

	$indicalor = null;
	
if(isset($_SESSION['id_process'])) {
		$idProcess = $_SESSION['id_process'];
	
		$serviceFactory = new ServiceFactory();
		$service = $serviceFactory->getService('ProcessService');
		$process = $service->read($idProcess);
		
	
	if(isset($_POST['name']) && Str::isMatch(Pattern::SENTENCE, $_POST['name']) 
	   && isset($_POST['id_unit']) && isset($_POST['year'])
	   && isset($_POST['weight']) && Str::isNotEmpty($_POST['weight']) && is_numeric($_POST['weight'])) {

			$indicalor = new Indicator();

			$indicalor->setProcess($process);
			
			$indicalor->setName($_POST['name']);
			$indicalor->setYear($_POST['year']);
			
			$indicalor->setWeight(floatval($_POST['weight']));
									
			$serviceUnit = $serviceFactory->getService('UnitService');
			$indicalor->setUnit($serviceUnit->read($_POST['id_unit']));

			if(isset($_POST['objective'])){
				$indicalor->setObjective(true);
			} else $indicalor->setObjective(false);
		
			Logger::debug("plan_define_department");
			if (!isset($_POST['plan_define_department'])){
				if (isset($_POST['plan_value']) && Str::isNotEmpty($_POST['plan_value']) && is_numeric($_POST['plan_value'])){
					$plan = floatval($_POST['plan_value']);
					$indicalor->setPlanValue($plan);
				}			
			}else $indicalor->setPlanValue(null);
		
			if(isset($_POST['id_parent_indicator']) && Str::isNotEmpty($_POST['id_parent_indicator'])) {
				$parent = new Indicator();
				$parent->setIdentity($_POST['id_parent_indicator']);
				$indicalor->setParent($parent);
			}

			$service = $serviceFactory->getService('IndicatorService');
			if(isset($_POST['id_indicator'])) {
				$indicalor->setIdentity($_POST['id_indicator']);
			}
			$service->save($indicalor);
	}
	if($indicalor !== null) {
		$_SESSION['id_indicator'] = $indicalor->getIdentity();
		$response->setActionPath('/editing/indicator/edit.html');
	} else {
		$response->setActionPath('/editing/process/edit.html');
	}
}
}
}
?>